package com.hu.user.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hu.common.pojo.Menu;
import com.hu.user.mapper.MenuMapper;
import com.hu.user.service.IMenuService;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author hu
 * @since 2023-08-02
 */
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
    @Override
    public List<Menu> findMenus(String name) {
        QueryWrapper<Menu> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("name", name);

        // 先查询所有数据,list()就是直接调用了myBatisPlus的list方法
        // 在controller层就是menuService.list(),在service就是直接调list()了
        // 此时拿到的list集合是平铺结构
        List<Menu> list = list(queryWrapper);
        //  list.forEach(menu -> {
        //      System.out.println("list===============================>"+menu+"\n");
        //  });
        // 找出pid为null的一级菜单
        // .collect(Collectors.toList())的作用是把stream转化成list集合
        List<Menu> parentNodes = list.stream().filter(menu -> menu.getPid() == null).collect(Collectors.toList());

        // 双层循环
        // 拿一个pid=0的菜单的id去和所有的菜单列表比较，如果menu的id等于m=pid，就把这个m塞到这个menu下面
        for (Menu menu : parentNodes) {
            // list.stream().filter(m -> menu.getId().equals(m.getPid())).collect(Collectors.toList())得到UI额个list集合

            menu.setChildren(list.stream().filter(m -> menu.getId().equals(m.getPid())).collect(Collectors.toList()));
        }
        return parentNodes;
    }
}
